package com.example.demo.mapper;

import com.example.demo.entity.ContractTemplateCategory;
import com.mysql.cj.log.Log;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 合同模版类别 Mapper
 *
 * @author Ethan Blake
 * @version 1.0
 * @since 2024/8/29
 */
public interface ContractTemplateCategoryMapper {

    /**
     * 添加合同模版类别
     *
     * @param templateCategory 待添加的合同模版类别信息
     * @return 受影响的行数
     */
    int insert(ContractTemplateCategory templateCategory);

    /**
     * 删除更新合同模版类别
     *
     * @param id 待删除合同模版类别的ID
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 更新合同模版类别信息
     *
     * @param id               合同模版类别ID
     * @param templateCategory 待更新的合同模版类别数据
     * @return 受影响的行数
     */
    int updateById(@Param("id") Long id, @Param("templateCategory") ContractTemplateCategory templateCategory);

    /**
     * 更新合同模版类别信息 (为null的属性将被忽略)
     *
     * @param id               合同模版类别ID
     * @param templateCategory 待更新的合同模版类别数据
     * @return 受影响的行数
     */
    int updateSelectiveById(@Param("id") Long id, @Param("templateCategory") ContractTemplateCategory templateCategory);

    /**
     * 获取所有合同模版类别
     *
     * @return 合同模版类别列表
     */
    List<ContractTemplateCategory> findAll();

    /**
     * 根据ID查询合同模版类别信息
     *
     * @param id 合同模版类别ID
     * @return 对应合同模版类别信息, 如果不存在则返回Null
     */
    ContractTemplateCategory findById(Long id);

    /**
     * 根据合同模版类别属父类ID查询所有的合同模版类别信息
     *
     * @param parentId 所属父类ID
     * @return 合同模版类别属父类ID所有的合同模版类别信息
     */
    List<ContractTemplateCategory> findByParentId(Integer parentId);

}
